package com.example.sys.wx.service;

import com.example.core.mapping.Mapping;
import com.example.core.po.BaseTreePo;
import com.example.core.service.BaseTreeServiceImpl;
import com.example.sys.wx.dao.SysWxMenuDao;
import com.example.sys.wx.mapping.SysWxMenuMapping;
import com.example.sys.wx.po.SysWxMenu;
import com.example.sys.wx.vo.SysWxMenuVo;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.bean.menu.WxMenu;
import me.chanjar.weixin.common.bean.menu.WxMenuButton;
import me.chanjar.weixin.mp.api.WxMpService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class SysWxMenuServiceImpl extends BaseTreeServiceImpl<SysWxMenuDao, SysWxMenu, SysWxMenuVo> implements SysWxMenuService {

    @Override
    public Class<? extends Mapping> getMappingClass() {
        return SysWxMenuMapping.class;
    }

    @Resource
    private WxMpService wxMpService;

    @Override
    public String sync() throws Exception {
        WxMenu wxMenu = new WxMenu();
        for (SysWxMenu sysWxMenu : this.findTreeList(null , null)) {
            WxMenuButton wxMenuButton = new WxMenuButton();
            wxMenuButton.setType(WxConsts.MenuButtonType.VIEW);
            wxMenuButton.setName(sysWxMenu.getName());
            wxMenuButton.setUrl(sysWxMenu.getUrl());
            if (!sysWxMenu.getChildren().isEmpty()) {
                for (BaseTreePo child : sysWxMenu.getChildren()) {
                    WxMenuButton childButton = new WxMenuButton();
                    childButton.setType(WxConsts.MenuButtonType.VIEW);
                    childButton.setName(child.getName());
                    childButton.setUrl(((SysWxMenu) child).getUrl());
                    wxMenuButton.getSubButtons().add(childButton);
                }
            }
            wxMenu.getButtons().add(wxMenuButton);
        }
        return this.wxMpService.getMenuService().menuCreate(wxMenu.toJson());
    }

}
